
const fs = require('fs')
const path = require('path')
const https = require('https')
const swagger = require('./config/swagger1')

const express = require('express')
// 参考文档 https://www.runoob.com/w3cnote/express-4-x-api.html
const app = express()
// 双向认证
// https://www.cnblogs.com/double1/p/13710103.html
// http://t.zoukankan.com/wzs5800-p-12779223.html
const options = {
  pfx: fs.readFileSync(path.join(__dirname, 'config', 'ca', 'server', 'server.pfx')),
  passphrase: '123456',
  // --
  // key: fs.readFileSync(path.join(__dirname, '../cert/a.key')),
  // cert: fs.readFileSync(path.join(__dirname, '../cert/a.pem'))

  ca: [fs.readFileSync(path.join(__dirname, 'config', 'ca', 'server', 'client.crt'))],
  // 使用客户端证书验证
  requestCert: true,
  // 如果没有请求到客户端来自信任CA颁发的证书，拒绝客户端的连接
  rejectUnauthorized: true

}

// //options有两个选项，一个是证书本体，一个是密码（刚刚的IIS文件夹的keystorePass.txt文件中）
const server = https.createServer(options, app)

app.use('/', express.static(path.join(__dirname, '../static')))
// express.json()函数是Express中的内置中间件函数
// 它使用body-parser解析带有JSON有效负载的传入请求 解析后req.body.参数名  就可以直接使用
// 参考https://vimsky.com/examples/usage/express-js-express-json-function.html
app.use(express.json())
// 统一响应格式https://www.csdn.net/tags/OtDaUgysODAyNDgtYmxvZwO0O0OO0O0O.html

/* 自定义中间件 */
app.use(function (req, res, next) {
  console.log('middleware')
  // req.testing = 'testing'

  //   console.log("req Content-Type:",  req.get('content-type'))
  //   console.log("res Content-Type:",  res.get('content-type'))

  //   if(req.get('content-type').indexOf ('application/json')>=0){
  // console.log(req.path,'==>',res)
  //   }
  return next()
})

// 获取所有路由
const routersInit = require('./router/index')
// 初始化路由
routersInit(app)
const PORT = 8082
swagger(app, PORT)
server.listen(PORT, function () {
  const host = server.address().address
  const port = server.address().port
  console.log('应用实例，访问地址为 http://%s:%s', host, port)
})
